CloudFormationでEC2インスタンスとセキュリティグループを作成してみた
こんにちは、イムチェジョンです。
最近、CloudFormationを勉強しています。CloudFormationは簡単にAWSリソースを作成できる便利なサービスです。
今回のブログではCloudFormationを利用してEC2インスタンスとセキュリティグループを作成し、セキュリティグループをEC2インスタンスに設定するのをまとめます。
アジェンダ
- テンプレートファイル作成 (YAML)
- スタック生成
- まとめ
1. テンプレートファイル作成 (YAML)
CloudFormationのテンプレートファイル作成はJSONまたはYAMLで作成します。
今回はYAMLでテンプレートファイルを作成します。
1-1. EC2インスタンス
EC2インスタンスの作成方法は下のブログにまとめたので、参考してください。
Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0e4a9ad2eb120e054 InstanceType: t2.micro
1-2. セキュリティグループ
次は、セキュリティグループをテンプレートファイルに作成してみましょう。
下のドキュメントで作成方法及び詳細情報が確認できます。
セキュリティグループの生成
実際に作成をしてみました。下のテンプレートには以下の内容が含まれています。
SSHSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0
SSHSecurityGroup
という新しいリソースを作成するSSHSecurityGroup
のリソースタイプはAWS::EC2::SecurityGroup(EC2 Security Group)
にするSSHSecurityGroup
のプロトコルはtcp
に設定するSSHSecurityGroup
のポート範囲は22
にするSSHSecurityGroup
のソースは0.0.0.0/0
に設定する
セキュリティグループにEC2インスタンスに設定
テンプレートにセキュリティグループの生成できるように作成しましたので、作成したセキュリティグループをEC2インスタンスに設定してみましょう。
設定する時にはRef関数
を使います。
Ref 組み込み関数
EC2インスタンスのテンプレートのSecurityGroups
部分にRef関数を使い、上で作成したSSHSecurityGroup
を指定します。
これでEC2インタンスのリソースを生成する時に、セキュリティグループとしてSSHSecurityGroup
が設定されます。
Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0e4a9ad2eb120e054 InstanceType: t2.micro SecurityGroups: - !Ref SSHSecurityGroup
1-3. Descriptionの設定
今回はDescription(説明)も追加で作成します。
Descriptionは単語のそのままスタックまたはリソースの説明を言います。
スタックの説明はこのように書けます。
Description: EC2 instance, Security Group
または、Security Groupのリソースを作成する時にProperties
のGroupDescription
部分にリソースの説明を書けます。
SSHSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0
1-4. 完成したテンプレートファイル
上のEC2インスタンス、セキュリティグループ、Descriptionまで含んだテンプレートです。
3つのリソースを作成します
Ec2Instance
: EC2インスタンスSSHSecurityGroup
: Security Group (SSH)HTTPSecurityGroup
: Security Group (HTTP)
Description: The template is EC2 instance, Security Group Resources: # EC2 instance Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0e4a9ad2eb120e054 InstanceType: t2.micro SecurityGroups: - !Ref SSHSecurityGroup - !Ref HTTPSecurityGroup # Security Group SSHSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 HTTPSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: HTTP access port 80 SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0
2. スタック生成
テンプレートファイルの作成ができたら、次はCloudFormationにテンプレートをアップロードしてスタックを実行してみましょう。
スタック生成
実際にスタックを生成してみます。
新しいリソースを使用 (標準)
をクリックして新しいスタックを生成します。
テンプレートの準備 : テンプレートの準備完了
を選択
テンプレートソース : テンプレートファイルのアップロード
を選択
テンプレートとしてアップロードするファイルを選択します。
スタックの名前はec2-sg
に設定します。
オプションは何も設定しません。
最後にレビューを確認してみると、上で追加したDescription
の内容がスタックの説明として書いています。
それ以外に内容を確認して[スタックの作成]をクリックすると、スタックが作成されます。
リソースの確認
作られたリソースを確認してみましょう。
まず、[スタックの情報]の説明で上で確認したDescription
の内容がスタックの説明として書いています。
リソースはEC2インスタンスと2つのセキュリティグループがあります。
EC2インスタンスから確認してみると、実際にインスタンスが生成されてタグでもCloudFormationのスタックで作成されたのを確認できます。
次は、EC2インスタンスの[セキュリティ]に設定されているセキュリティグループを確認できますが、テンプレートでRef関数
を使って設定したように二つのセキュリティグループが追加されています。
セキュリティグループも確認してみましょう。
二つのセキュリティグループが作成されました。
テンプレートで設定したようにSSHとHTTPによく設定されています。
これでEC2インスタンスとセキュリティグループの作成がよくされたのが確認できます。
3. まとめ
今回はCloudFormationを利用してEC2とセキュリティグループを作成、設定するのをまとめてみました。CloudFormationを使うと、いろんなサービスの作成と設定を一気にできるので便利でした!